import * as TWEEN from "@tweenjs/tween.js";
import * as THREE from "three" ;
import {CSS3DObject, CSS3DRenderer} from 'three/examples/jsm/renderers/CSS3DRenderer.js';
export const PublicMethodsExtend = {
    methods:{
        getMapData(mapName){
            let mapData = JSON.parse(localStorage.getItem(mapName))
            var worldMap =  this.scene.getObjectByName("worldMap")
            this.scene.remove(worldMap);
            this.map = new THREE.Object3D()
            this.MapData = mapData
            this.initMap()
            this.initNatoMap();
            this.updateView()
            this.removeOldModel();
        },
        show3dImage(){
            var natoLogo  = document.getElementById("natoLogo");
            var coords = {
                x:0.000,
            }
            var tween = new TWEEN.Tween(coords);
            tween.to({
                x: 1,
            }, 6000);
            tween.easing(TWEEN.Easing.Quadratic.Out);
            tween.onUpdate(() => {
                natoLogo.style.opacity = coords.x
            });
            tween.onComplete(() => {
            });
            tween.start();
        },
        create3dImages(){
            let img = document.createElement('img');
            img.id = "natoLogo"
            img.src = "img/logo.png";
            img.style.opacity = 0.000 ;
            let myImg = new CSS3DObject(img);
            return myImg;
        },
        // 加载北约国家扩展数量
        async loadCountryNumber(number){
            let model ;
            switch (number) {
                case "init" : model = this.gltfLoadModel("model/public/country_number/init/scene.gltf"); break;
                case 1      : model = this.gltfLoadModel("model/public/country_number/one/scene.gltf"); break;
                case 2      : model = this.gltfLoadModel("model/public/country_number/two/scene.gltf"); break;
                case 3      : model = this.gltfLoadModel("model/public/country_number/three/scene.gltf"); break;
                case 4      : model = this.gltfLoadModel("model/public/country_number/four/scene.gltf"); break;
                case 5      : model = this.gltfLoadModel("model/public/country_number/five/scene.gltf"); break;
                case 6      : model = this.gltfLoadModel("model/public/country_number/six/scene.gltf"); break;
                case 7      : model = this.gltfLoadModel("model/public/country_number/seven/scene.gltf"); break;
                case 8      : model = this.gltfLoadModel("model/public/country_number/eight/scene.gltf"); break;
            }
            await model.then((res)=>{
                var font = res.scene.clone() ;
                font.scale.set(40,40,40)
                font.position.set(120, 60, -250)
                font.name = "countryNumber"
                this.scene.add(font)
            })
        },
        // 给指定国家上颜色
        colorMap(name,color){
            this.map.children.forEach((item) => {
                if (item.properties.name == name) {
                    item.children.forEach((area) => {
                        if (area.type == "Mesh") {
                            area.material.color.set(color)
                        }
                    })
                }
            })
        },
        openingAnimationProptText(){
            this.$parent.showDialog();
            this.$parent.showPromptText("第二次世界大战后",0,1.2) ;
            this.$parent.showPromptText("美国为维护其在欧洲的主导地位",1.2,4.1) ;
            this.$parent.showPromptText("联合西欧一些国家",4.1,5.26) ;
            this.$parent.showPromptText("1949年4月4日正式成立了北大西洋公约组织",5.26,10.04) ;
            this.$parent.showPromptText("总部位于比利时布鲁塞尔",10.04,12.10) ;
            this.$parent.showPromptText("北约的目的是与苏联为首的东欧集团国成员相抗衡",12.10,17) ;
            setTimeout(()=>{
                this.$parent.closeDialog();
                this.$parent.btnIsDis = false;
            },17000)

        },
        firstPromptText(){
            this.$parent.showDialog();
            this.$parent.showPromptText("1952年北约第一次扩大",0,2.3) ;
            this.$parent.showPromptText("土耳其和希腊请求加入北约",2.3,4.8) ;
            this.$parent.showPromptText("北约需要利用土耳其来对抗苏联",4.8,7.3) ;
            this.$parent.showPromptText("土耳其是唯一一个与苏联接壤的北约国家",7.3,11.8) ;
            this.$parent.showPromptText("并且土耳其和希腊的加入",11.8,13.8)
            this.$parent.showPromptText("卡死了苏联黑海舰队出海口",13.8,17.8)
            setTimeout(()=>{
                this.$parent.closeDialog();
                this.$parent.btnIsDis = false;
            },18000)
        },
        secoundPromptText(){
            this.$parent.showDialog();
            this.$parent.showPromptText("1955年5月9日联邦德国加入北约",0,3.3);
            this.$parent.showPromptText("标志着冷战的转折点",3.3,7.5);
            this.$parent.showPromptText("联邦德国加入北约一个星期后,即1955年5月14日",7.5,11.5);
            this.$parent.showPromptText("苏联成立了华沙条约组织",11.5,13.9);
            this.$parent.showPromptText("其中包括德意志民主共和国",14,16.2);
            this.$parent.showPromptText("也称为东德,铁幕已经真正落下",16.2,19);
            this.$parent.showPromptText("在东欧和西欧之间",19.2,20.7);
            this.$parent.showPromptText("划出了一条严酷而装备精良的界线",20.7,23.2);
            this.$parent.showPromptText("这条界线在德国最为明显",23.2,31);
            // 31s + 3.3 s
            this.$parent.showPromptText("1966年3月7日,法国总统戴高乐",31,34.4);
            // 31s + 5.5s
            this.$parent.showPromptText("要求驻法美军撤出法国",34.4,36.6);
            // 31s + 8.7s
            this.$parent.showPromptText("并声明法国需要重建正常的主权环境",36.6,39.8);
            // 31s + 12.1s
            this.$parent.showPromptText("法国总统戴高乐,看透了美国人利用北约组织",39.8,43.2);
            // 31s + 14.3s
            this.$parent.showPromptText("达到自己称霸世界的野心",43.2,45.4);
            setTimeout(()=>{
                this.$parent.closeDialog();
                this.$parent.btnIsDis = false;

            },46000)
        },
        thirdPromptText(){
            this.$parent.showDialog();
            this.$parent.showPromptText("1982年5月30日",0,3);
            this.$parent.showPromptText("西班牙加入北约军事一体化机构",3,5.7);
            this.$parent.showPromptText("对北约加强其南翼有着重要意义",5.7,8.65);
            this.$parent.showPromptText("所谓南翼",8.65,9.5);
            this.$parent.showPromptText("主要指地中海地区",9.5,10.9);
            this.$parent.showPromptText("和非洲北部的马格里布地区",10.9,13.1);
            this.$parent.showPromptText("北约认为由于复杂的宗教和民族问题",13.1,16.4);
            this.$parent.showPromptText("这个地区存在着不稳定因素",16.4,18.8);
            this.$parent.showPromptText("而西班牙地处南翼战略要地",18.8,20.9);
            this.$parent.showPromptText("加强南翼是必要倚重西班牙",20.9,26);
            setTimeout(()=>{
                this.$parent.closeDialog() ;
                this.$parent.btnIsDis = false;

            },26000)
        },
        fourthPropText(){
            this.$parent.showDialog();
            this.$parent.showPromptText("1991年12月25日",0,2.5);
            this.$parent.showPromptText("戈尔巴乔夫宣布苏联解体",2.5,4.5);
            this.$parent.showPromptText("并将国家权力移交给俄罗斯总统叶利钦",4.5,7.8);
            this.$parent.showPromptText("在这同一天华约政治协商委员会宣布",7.8,10.9);
            this.$parent.showPromptText("华沙条约组织宣布解散",10.9,13.1);
            this.$parent.showPromptText("这标志着以美苏争霸为特征的两级格局正式结束",13.1,17.1);
            this.$parent.showPromptText("1999年3月12日",17.1,19.04);
            this.$parent.showPromptText("捷克、匈牙利、波兰一起加入了北约",19.04,22.07);
            this.$parent.showPromptText("对于俄罗斯来说这无疑是很大的打击",22.07,25.20);
            this.$parent.showPromptText("因为这次事件发生在苏联和华约解体之后",25.20,29.03);
            this.$parent.showPromptText("标志着北约东扩的开始",29.03,31.04);
            this.$parent.showPromptText("波兰曾经是华约总部的所在地,他加入北约的象征意义是非常大的",31.04,36.16);
            this.$parent.showPromptText("同时对其他的前华约成员国来说,也起到了一个带动的作用",36.16,43);
            setTimeout(()=>{
                this.$parent.closeDialog()
                this.$parent.btnIsDis = false;

            },43000)
        },
        fifthPrompText(){
            // 台词
            this.$parent.showDialog()
            this.$parent.showPromptText("2004年3月29日北约第五次扩张",0,3.16) ;
            this.$parent.showPromptText("也是最大的一次扩张",3.16,5.04) ;
            this.$parent.showPromptText("斯洛文尼亚加入北约",5.04,6.29) ;
            this.$parent.showPromptText("前苏联加盟国加入北约",6.29,9.06) ;
            this.$parent.showPromptText("爱沙尼亚、拉脱维亚、立陶宛",9.06,12.00) ;
            this.$parent.showPromptText("前华约国家加入北约",12.00,13.28) ;
            this.$parent.showPromptText("斯洛伐克、罗马尼亚和保加利亚",13.28,16.24) ;
            this.$parent.showPromptText("北约国家严重的威胁到了俄罗斯的安全",16.24,20.00) ;
            this.$parent.showPromptText("这一次扩张威胁到了俄罗斯的安全",20.00,23.00) ;
            this.$parent.showPromptText("俄罗斯随即在加里宁格勒部署核弹",23.00,25.24) ;
            this.$parent.showPromptText("可以在10分钟内就把核弹发射到",25.24,28.07) ;
            this.$parent.showPromptText("德国、法国和英国的首都",28.07,33) ;
            setTimeout(()=>{
                this.$parent.closeDialog()
                this.$parent.btnIsDis = false;

            },33000)
        },
        sixthPromptText(){
            // 台词
            this.$parent.showDialog()
            this.$parent.showPromptText("2009年4月1日",0,1.24) ;
            this.$parent.showPromptText("美国国会正式批准",1.24,3.12) ;
            this.$parent.showPromptText("克罗地亚和阿尔巴尼亚加入北约议定书",3.12,6.20) ;
            this.$parent.showPromptText("并希望北马其顿能解决分歧",6.20,9.04) ;
            this.$parent.showPromptText("也尽快加入北约",9.04,11) ;
            this.$parent.showPromptText("经过北约不断的扩张",11,12.27) ;
            this.$parent.showPromptText("北约距离俄罗斯家门口就剩下",12.27,15) ;
            this.$parent.showPromptText("乌克兰、白俄罗斯和摩尔多瓦",15,18.03) ;
            this.$parent.showPromptText("形势已经达到剑拔弩彰的局面",18.03,22) ;

            setTimeout(()=>{
                this.$parent.closeDialog()
                this.$parent.btnIsDis = false;

            },22000)
        },
        seventhPromptText(){
            this.$parent.showDialog();
            this.$parent.showPromptText("2017年6月5日",0,1.20);
            this.$parent.showPromptText("黑山共和国忽视俄罗斯警告加入北约",1.20,4.23);
            this.$parent.showPromptText("黑山加入北约以后",4.23,6.16);
            this.$parent.showPromptText("北约在巴尔干半岛的力量急剧增强",6.16,9.16);
            this.$parent.showPromptText("巴尔干地处欧、亚、非三大洲的汇合处",9.16,13.12);
            this.$parent.showPromptText("战略意义重大",13.12,14.21);
            this.$parent.showPromptText("而俄国目前在这一地区仅有塞尔维亚一个盟友",14.21,18.10);
            this.$parent.showPromptText("处于北约的罗马利亚、保加利亚匈牙利",18.10,21.24);
            this.$parent.showPromptText("黑山等国的四面包围之中",21.24,25);
            setTimeout(()=>{
                this.$parent.closeDialog()
                this.$parent.btnIsDis = false;

            },25000)

        },
        eighthPromptText(){
            this.$parent.showDialog();
            this.$parent.showPromptText("2020年3月27日",0,2.02);
            this.$parent.showPromptText("北马其顿加入北约",2.02,3.26);
            this.$parent.showPromptText("从北马其顿的地理位置来看",3.26,6.04);
            this.$parent.showPromptText("该国地处巴尔干半岛的核心地带",6.04,8.29);
            this.$parent.showPromptText("将为北约控制巴尔干半岛发挥重要作用",8.29,12.06);
            this.$parent.showPromptText("另外北马奇顿西北部与科索沃地区接壤",12.06,15.24);
            this.$parent.showPromptText("北约能够从这个方向对塞尔维亚进行遏制和干预",15.24,20.02);
            this.$parent.showPromptText("并可能吸引其他巴尔干国家加入北约",20.02,24);
            setTimeout(()=>{
                this.$parent.closeDialog();
                this.$parent.btnIsDis = false;

            },24000)
        },
        // 模型渐隐
        recedingModel(model,oldPos,newPos,time){
            var coords = {
                x:oldPos.x,
                y:oldPos.y,
                z:oldPos.z
            }
            var tween = new TWEEN.Tween(coords);
            tween.to({
                x: newPos.x,
                y: newPos.y,
                z: newPos.z,
            }, time);
            tween.easing(TWEEN.Easing.Quadratic.Out);
            tween.onUpdate(() => {
                model.position.set(coords.x, coords.y, coords.z);
            });
            tween.onComplete(() => {
                model.visible = false ;
                if(model.children[1]){
                    model.children[1].visible = false;
                }
            });
            tween.start();
        },
        // 消除上一个场景的模型
        removeOldModel() {
            var temp = this.scene.getObjectByName("Jb");
            var countryNumber = this.scene.getObjectByName("countryNumber");
            var pointerGroup = this.scene.getObjectByName("pointerGroup") ;
            pointerGroup.traverse((item)=>{
                item.visible = false
            })
            this.scene.remove(countryNumber)
            console.log(temp)
            if (temp != undefined) {
                temp.traverse((item) => {
                    if (item instanceof CSS3DObject) {
                        var parent = item.parent
                        parent.remove(item)
                    }
                })
            }
            this.scene.remove(temp)
        },
        // 组装地图指示器
        bindMapPointer(pointer,label,animation,position,name){
            label.visible = false
            var pointerGroup = this.scene.getObjectByName("pointerGroup");
            pointer.position.set(position.x,position.y,position.z) ;
            pointer.scale.set(2,2,1.5) ;
            pointer.add(label);
            pointer.name = name
            pointerGroup.add(pointer) ;
            let action = this.animationMixer.clipAction(animation,pointer);
            action.play() ;
            this.mapPointerAnis.push(action) ;
        },
        // 动态更换图片画框图片
        changePicTexture(imgAraay){
            var picFrameGroup = this.scene.getObjectByName("PicGroup") ;
            for(let i = 0 ; i< imgAraay.length ; i++){
                var picFrameModel  = picFrameGroup.children[i] ;
                var photoTexture = this.changeTexture(imgAraay[i].imgUrl) ;
                picFrameModel.children[0].children[1].material.map = photoTexture ;
                picFrameModel.userData = imgAraay[i].imgDesc ;
            }
        },
        // 是否显示地图指示器光标
        isShowMapPointer(){
            var pointerGroup = this.scene.getObjectByName("pointerGroup");
            if(pointerGroup){
                var intersects = this.raycaster.intersectObjects(pointerGroup.children,true);
                if(this.backArray && this.backArray.length > 0){
                    this.backArray.forEach((item)=>{
                        item.object.parent.parent.parent.children[1].visible = false;
                        item.object.material.color.set("#ff0610")
                        this.mapPointerAniPauseOrStart(item.object.parent.parent.parent.name,false)
                    })
                }
                this.backArray = [] ;
                for (let i = 0; i < intersects.length; i++) {
                    this.backArray.push(intersects[i]) ;
                    if(intersects[i].object.parent.parent.parent.visible == true){
                        intersects[i].object.parent.parent.parent.children[1].visible = true ;
                    }
                    this.mapPointerAniPauseOrStart(intersects[i].object.parent.parent.parent.name,true)
                    intersects[i].object.material.color.set("rgba(206,169,22,0.62)")
                    break;
                }
            }
        },
        mapPointerAniPauseOrStart(obj,state){
            switch (obj) {
                case "onePointer": this.mapPointerAnis[0].paused = state; break;
                case "twoPointer": this.mapPointerAnis[1].paused = state; break;
                case "threePointer": this.mapPointerAnis[2].paused = state; break;
                case "fourPointer": this.mapPointerAnis[3].paused = state; break;
                case "fivePointer": this.mapPointerAnis[4].paused = state; break;
                case "sixPointer": this.mapPointerAnis[5].paused = state; break;
                case "sevenPointer": this.mapPointerAnis[6].paused = state; break;
                case "eightPointer": this.mapPointerAnis[7].paused = state; break;
            }
        },
        // 是否显示图片文字描述
        isShowPicDesc(){
            var PicGroup = this.scene.getObjectByName("PicGroup");
            if(PicGroup){
                var intersects = this.raycaster.intersectObjects(PicGroup.children,true);
                if(this.picArray && this.picArray.length > 0){
                    this.backArray.forEach((item)=>{
                        item.object.parent.parent.parent.children[1].visible = false;
                        item.object.material.color.set("#ff0610")
                    })
                }

                this.picArray = [] ;
                for (let i = 0; i < intersects.length; i++) {
                    if(intersects[i]){
                        this.picArray.push(intersects[i]) ;
                        break;
                    }
                }
                this.createProvincePicInfo()
            }
        },
        createProvincePicInfo() {
            if (this.picArray.length != 0 && this.picArray[0].object.parent.parent.userData) {
                var userData = this.picArray[0].object.parent.parent.userData;
                var childNodes = this.provincePicDescInfo.childNodes;
                childNodes[1].textContent = userData ;
                this.provincePicDescInfo.style.visibility = 'visible';
            } else {
                this.provincePicDescInfo.style.visibility = 'hidden';
            }
        }
    }
}